package com.xmim.core.session.user;

import com.xmim.core.entity.UserDetail;
import com.xmim.core.session.Session;

/**
 * create by CAOYOU
 **/
public interface UserSession extends Session {

    String ATTR_HOST = "host";
    String ATTR_HOST_NAME = "host_name";
    String ATTR_PORT = "port";

    /**
     * 获取通讯的会话ID
     *
     * @return
     */
    String getSessionId();

    /**
     * 设置用户信息
     *
     * @param user
     */
    UserSession setUser(UserDetail user);

    /**
     * 添加属性
     *
     * @param key
     * @param value
     */
    UserSession addAttribute(String key, Object value);

    /**
     * 获取属性
     *
     * @param key
     * @param <A>
     * @return
     */
    <A> A getAttribute(String key);


    /**
     * 写入数据并关闭连接
     *
     * @param pkg
     */
    default UserSession writeAndClose(Object pkg) {
        this.writeAndFlush(pkg);
        this.close();
        return this;
    }


    /**
     * 通道实现双向绑定
     *
     * @return
     */
    <C> UserSession bind(C channel);

    /**
     * 通道解绑
     *
     * @return
     */
    UserSession unbind();

    /**
     * 关闭连接
     */
    UserSession close();

    /**
     * 获取用户信息
     *
     * @return
     */
    UserDetail getUser();

    /**
     * 会话是否有效
     *
     * @return
     */
    boolean isValid();

    /**
     * 获取通讯的通道
     *
     * @return
     */
    <C> C getContext();

    /**
     * 是否登陆
     *
     * @return
     */
    boolean isLogin();
}

